iT邦幫忙

2023 iThome 鐵人賽

DAY 15
0
Security

從自建漏洞中學習 - 一起填坑吧系列 第 15

Node.js 安全最佳實踐 - 2 (其他實踐篇)

  • 分享至 

  • xImage
  •  

Node.js 安全最佳實踐 - 2 (其他安全實踐篇)

在上一篇我們大致上介紹了 Node.js 的第三方 library 的安全實踐後,我再為大家介紹其他的安全實踐吧~

HTTP 伺服器拒絕服務

在這種攻擊中,由於應用程式處理傳入 HTTP 請求的方式,應用程式無法達到其設計目的,例如: 執行應用程式。

  • 能夠導致拒絕服務的原因:

    配置錯誤或有缺乏錯誤處理的 Client 端也可以向伺服器發送請求模式,從而導致拒絕服務,不一定要惡意攻擊者為之。

    以下是 Node.js "非"安全實踐的範例:

    const net = require('net');
    
    const server = net.createServer(function (socket) {
      // socket.on('error', console.error) // this prevents the server to crash
      socket.write('Echo server\r\n');
      socket.pipe(socket);
    });
    
    server.listen(5000, '0.0.0.0');
    

    解說:

    上述範例因為缺乏針對 error 的錯誤處理,而導致如果有不好的 request ,可能伺服器就會直接 crash

  • 如何緩解? 針對這方面需要怎麼處理?

    1. 使用反向代理接收請求並將請求轉發到 Node.js 應用程式。

      反向代理可以提供快取、負載平衡、IP 黑名單等功能,從而降低 DoS 攻擊有效的可能性。

      說明:

      此處的反向代理可以使用 nginx,但此處就先部戲講,有興趣可以參考: https://blog.logrocket.com/how-to-run-a-node-js-server-with-nginx/

    2. 正確配置伺服器逾時,以便可以丟棄空閒或請求到達速度太慢的連線。

      (詳細文件可以參考: https://nodejs.org/api/http.html)

      在 Node.js 中,超時處理可以使用 headersTimeout、requestTimeout、timeout 和 keepAliveTimeout。

    3. 限制每台主機開啟的套接字數量和總數。

      (詳細文件可以參考: https://nodejs.org/api/http.html)

      在 Node.js 中,可以使用 agent.maxSockets、agent.maxTotalSockets、agent.maxFreeSockets 和 server.maxRequestsPerSocket 等來進行設定。

HTTP 請求走私

這是涉及兩個 HTTP 伺服器(通常是代理和 Node.js 應用程式)的攻擊。

過程範例:

  1. 客戶端發送 HTTP 請求
  2. 該請求首先通過前端伺服器(代理)
  3. 重定向到後端伺服器(應用程式)
  4. 當前端和後端以不同方式解釋不明確的 HTTP 請求時,攻擊者有可能發送前端看不到但後端可以看到的惡意訊息
  5. 達成 HTTP 請求走私
  • 如何緩解?

    1. 建立 HTTP 伺服器時不要使用 insecureHTTPParser 選項。
    2. 配置前端伺服器以規範不明確的請求。
    3. 持續監控 Node.js 和所選前端伺服器中新的 HTTP 請求走私漏洞。
    4. 使用 HTTP/2 端到端並停用 HTTP 降級 (如果可以的話)。

向未經授權的參與者洩露敏感資訊

要注意不要公開洩漏或是洩漏敏感資訊給某個平台上的未經授權使用者~

以在套件發布期間為例,目前目錄中包含的所有檔案和資料夾都會推送到 npm 註冊表,所以需要注意自己需要在推送之前不要誤推送不應該推送的敏感資訊給別人知道。

  • 如何緩解?

    1. 使用 npm publish --dry-run 列出所有要發佈的文件。確保在發布包之前檢查內容。
    2. 建立和維護忽略文件(例如 .gitignore.npmignore)也很重要。在這些文件中,可以指定不應發布哪些文件/資料夾。 package.json 中的 files 屬性允許逆操作-允許清單。
    3. 如果發生洩露,請務必取消發布該包。

今日小心得

以上大致上介紹這幾點安全實踐 ~ 雖然說還有滿多是在 Node.js 官方公布的安全實踐而在今天的文章中沒提到的,但有介紹幾個滿常見可能會在還不熟悉 Node.js 開發可能會遇到的問題 ~


Reference


上一篇
Node.js 安全最佳實踐 - 1 (第三方套件篇)
下一篇
開始使用 Node.js 建立 Auth 應用程式 - 規劃篇之 1
系列文
從自建漏洞中學習 - 一起填坑吧30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言